package com.example.test.advice.第三章_类_对象_方法.建议38_使用静态内部类提高封装性;

public class Person {
    //姓名
    private String name;
    //家庭
    private Home home;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Home getHome() {
        return home;
    }

    public void setHome(Home home) {
        this.home = home;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", home=" + home +
                '}';
    }

    /**
     * 内部类优点
     * 1、提高封装性
     * 2、提高代码的可读性
     * 3、形似内部，神似外部
     *
     * 静态内部类与普通内部类的区别
     * 1、静态内部类不持有外部类的引用：普通内部类可以直接方法外部类的属性、方法，即便是private的也可以，
     *   而静态内部类只能访问外部类的静态方法和静态属性
     * 2、静态内部类不依赖外部类
     * 3、普通内部类不能声明static的方法和变量
     */
    public static class Home {
        //家庭地址
        private String address ;

        //家庭电话
        private String tel;

        public Home(String address, String tel) {
            this.address = address;
            this.tel = tel;
        }

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }

        public String getTel() {
            return tel;
        }

        public void setTel(String tel) {
            this.tel = tel;
        }

        @Override
        public String toString() {
            return "Home{" +
                    "address='" + address + '\'' +
                    ", tel='" + tel + '\'' +
                    '}';
        }
    }
}
